package job.job_0823;
import java.util.Arrays;
public class OddEvenChange {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6};
        oddEvenChange(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void oddEvenChange(int[] arr) {//调整数组顺序使得奇数位于偶数之前。调整之后，不关心大小顺序。
        int left = 0;
        int right = arr.length - 1;
        while (left < right) {
            if (((arr[left] % 2) == 0) && ((arr[right] % 2) != 0)) {
                int tmp = arr[left];
                arr[left] = arr[right];
                arr[right] = tmp;
            }
            if ((arr[left] % 2) != 0) {
                left++;
            }
            if ((arr[right] % 2) == 0) {
                right--;
            }
        }
    }

//  教师答案:
//  相比if，while对撞指针思路，更快。if一次只走一个指针，而用while是先找到左右都满足条件的位置
    public static void oddEvenChangeTwo(int[] arr) {//调整数组顺序使得奇数位于偶数之前。调整之后，不关心大小顺序。
        int left = 0;
        int right = arr.length - 1;
        while (left < right) {
            while ((left < right) && (arr[left] % 2) != 0) {//两次循环, 更少的判断边界条件
                left++;
            }
            while ((left < right) && (arr[right] % 2) == 0) {//防止内层循环数组越界，例如全是奇数的情况下，left会越界
                right--;
            }
            int tmp = arr[left];
            arr[left] = arr[right];
            arr[right] = tmp;
        }
    }
}


